01 忙碌的士兵 - CPU 与 top 指令
top 实时显示系统运行状态
top指令是 Linux 下常用的性能分析工具- 实时显示系统中各个进程的资源占用状况
- 类似于 Windows 的任务管理器
- 在终端直接输入
top即可使用
top命令的功能是实时显示系统运行状态,包含处理器、内存、服务、进程等重要资产信息。- 运维工程师们常常会把
top命令比作“加强版的 Windows 任务管理器”,因为除了能看到常规的服务进程信息之外,还能够对处理器和内存的负载情况一目了然,实时感知系统全局的运行状态。 top命令非常适合作为接手服务器后执行的第一条命令。- 语法格式:
top 参数 对象
| 参数 | 描述 |
|---|---|
-a | 按内存使用情况排序 |
-b | 使用批处理模式,不进行交互式显示 |
-c | 使用显示模式 |
-d | 设置显示的更新速度 |
-h | 显示帮助信息 |
-i | 不显示任何闲置或僵死的行程 |
-M | 显示内存单位 |
-n | 设置显示的总次数,完成后自动退出 |
-p | 仅显示指定进程 ID |
-s | 使用安全模式,不允许交互式指令 |
-u | 仅显示与指定用户 ID 相关的进程 |
-v | 使用线程模式 |
-w | 设置显示的宽度 |
top 指令与 Windows 任务管理器对比

top 指令输出各指标含义
`top`命令的输出会实时更新,你可以通过按下不同的键来改变显示的选项或者排序方式。
- 按
1可以显示所有 CPU 的使用情况 - 按
m可以按内存使用情况排序
统计信息区
bash
➜ ~ top
top - 18:23:22 up 6 days, 9:11, 2 users, load average: 0.01, 0.09, 0.04
Tasks: 131 total, 1 running, 129 sleeping, 0 stopped, 1 zombie
%Cpu(s): 0.4 us, 0.7 sy, 0.0 ni, 98.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3658.8 total, 581.9 free, 689.1 used, 2760.4 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 2969.7 avail Mem第一行
top - 18:23:22 up 6 days, 9:11, 2 users, load average: 0.01, 0.09, 0.04top:命令名称。18:23:22:当前系统时间。up 6 days, 9:11:系统已经运行了 6 天 9 小时 11 分钟。2 users:当前有 2 个用户登录到系统。load average: 0.01, 0.09, 0.04:系统在过去 1 分钟、5 分钟和 15 分钟内的平均负载。这三个数值越小,表示系统负载越低。
第二行
Tasks: 131 total, 1 running, 129 sleeping, 0 stopped, 1 zombieTasks:任务(进程)总数。131 total:当前系统总共有 131 个任务(进程)。1 running:有 1 个进程正在运行。129 sleeping:有 129 个进程正在休眠状态。0 stopped:没有进程被停止。1 zombie:有 1 个僵尸进程(已结束但未被父进程回收的进程)。
第三行
%Cpu(s): 0.4 us, 0.7 sy, 0.0 ni, 98.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st%Cpu(s)::CPU 使用情况概览。0.4 us:用户空间占用 CPU 的百分比(user space)。0.7 sy:内核空间占用 CPU 的百分比(system)。0.0 ni:改变过优先级的进程占用 CPU 的百分比(nice)。98.9 id:CPU 空闲的百分比(idle)。0.0 wa:等待 I/O 完成的 CPU 时间百分比(iowait)。0.0 hi:硬件中断占用 CPU 的百分比(hardware interrupt)。0.0 si:软件中断占用 CPU 的百分比(software interrupt)。0.0 st:虚拟机偷取时间 (被其他操作系统偷走的)(steal time),在虚拟化环境中,当宿主机使用虚拟 CPU 时,虚拟 CPU 等待真实 CPU 的时间。0.0 st- 这个参数仅在虚拟机内有- 如果这个参数过高,表明云服务提供商超卖严重
第四行
MiB Mem : 3658.8 total, 581.9 free, 689.1 used, 2760.4 buff/cacheMiB Mem:内存使用情况(以 MiB 为单位)。3658.8 total:总内存量。581.9 free:空闲内存量。689.1 used:已使用的内存量。2760.4 buff/cache:用于缓冲和缓存的内存量。
第五行
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 2969.7 avail MemMiB Swap:交换空间使用情况(以 MiB 为单位)。0.0 total:总交换空间量。0.0 free:空闲交换空间量。0.0 used:已使用的交换空间量。2969.7 avail Mem:可用于启动新应用程序的内存量(包括空闲内存和缓存内存)。
输出指标
bash
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4997 root 20 0 567536 24996 5376 S 2.0 0.7 84:44.54 barad_agent
18 root 20 0 0 0 0 I 0.3 0.0 1:46.27 rcu_preempt
4427 root 20 0 0 0 0 I 0.3 0.0 0:00.20 kworker/0:1-events
31520 root 20 0 0 0 0 I 0.3 0.0 0:00.14 kworker/u16:0-events_unbound
845299 root 20 0 1026620 109876 33024 S 0.3 2.9 97:12.66 YDService
1 root 20 0 172024 14336 9984 S 0.0 0.4 0:49.21 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.28 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pool_workqueue_
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-rcu_g
5 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-rcu_p
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-slub_
7 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-netns
11 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/R-mm_pe
13 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_tasks_kthre
14 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_tasks_rude_
15 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_tasks_trace
16 root 20 0 0 0 0 S 0.0 0.0 0:36.20 ksoftirqd/0
17 root 0 -20 0 0 0 S 0.0 0.0 0:00.37 pr/ttyS0
19 root rt 0 0 0 0 S 0.0 0.0 0:01.17 migration/0
20 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/0
22 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
23 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
24 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/1
25 root rt 0 0 0 0 S 0.0 0.0 0:01.37 migration/1
26 root 20 0 0 0 0 S 0.0 0.0 0:35.00 ksoftirqd/1
28 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0H-events_highpri
29 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/2
30 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/2
31 root rt 0 0 0 0 S 0.0 0.0 0:01.41 migration/2
32 root 20 0 0 0 0 S 0.0 0.0 0:36.15 ksoftirqd/2
34 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/2:0H-events_highpri
35 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/3| 字段 | 描述 |
|---|---|
PID | 进程 ID(Process ID),是操作系统为每个进程分配的唯一标识 |
USER | 进程的所有者(USER),启动该进程的用户 |
PR | 进程的优先级(Priority)。20 表示普通优先级,值越低优先级越高 |
NI | 进程的 nice 值(Nice value),负值表示更高的优先级,正值表示更低的优先级,0 表示没有调整 |
VIRT | 进程使用的虚拟内存总量(Virtual Memory Size),包括所有内存(物理内存 + 交换空间),单位为 KB |
RES | 进程使用的常驻内存大小(Resident Memory Size),进程使用的物理内存量,单位为 KB |
SHR | 进程使用的共享内存大小(Shared Memory Size),这些内存可以和其他进程共享,单位为 KB |
S | 进程的状态(Status) |
%CPU | 进程使用的 CPU 时间百分比 |
| %MEM | 进程使用的内存百分比 |
TIME+ | 进程运行的总时间,格式为 [DD-]HH:MM:SS |
COMMAND | 启动进程的命令名 |
bash
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4997 root 20 0 567536 24996 5376 S 2.0 0.7 84:44.54 barad_agent- 进程 ID 为 4997,属于 root 用户。
- 优先级为 20,nice 值为 0。
- 虚拟内存使用量为 567536KB,常驻内存使用量为 24996KB,共享内存使用量为 5376KB。
- 进程状态为 S(休眠)。
- CPU 使用率为 2.0%。
- 内存使用率为 0.7%。
- 运行时间为 84 天 44 分钟 54 秒。
- 命令名为 barad_agent。
进程状态(S 列)
| 状态 | 描述 | 详细说明 |
|---|---|---|
R | 运行 (Running) | 进程正在使用 CPU 或准备使用 CPU。在多核系统中,多个进程可以同时处于运行状态。 |
S | 睡眠 (Sleeping) | 进程在等待某个事件的完成,大多数进程在大多数时间里都是处于这种状态。可中断睡眠状态下的进程可以被信号打断。 |
D | 不可中断睡眠 (Uninterruptible Sleep) | 进程正在等待某个内核事件完成,不可被打断。这种状态通常表示进程在等待磁盘 I/O 操作完成。进程不能处理信号,直到其所等待的事件完成。 |
T | 停止 (Stopped) | 进程已停止运行,可能是因为接收到停止信号(如 SIGSTOP)或正在被调试。停止状态的进程可以通过接收 SIGCONT 信号恢复运行。 |
Z | 僵尸 (Zombie) | 进程已经终止,但其父进程尚未读取其退出状态。僵尸进程没有任何活动资源,但仍然保留进程 ID。父进程通过 wait() 系统调用来读取其退出状态并释放其进程 ID。 |
I | 空闲 (Idle) | 进程没有任何工作需要处理,常用于内核线程,表示其当前没有活动任务需要处理。 |
top 指令常用参数
| 参数 | 说明 |
|---|---|
-b | 以批处理模式运行,适合将输出重定向到文件或其他命令。 |
-d delay | 设置更新之间的延迟时间(单位:秒)。默认值为 3 秒。 |
-n iter | 设置更新的次数,在达到指定次数后自动退出。 |
-p pid | 仅监视指定的进程 ID。 |
-u user | 显示特定用户的进程。 |
-H | 显示线程而不是进程。 |
-s | 启动时使屏幕不可滚动,适合在终端显示中避免屏幕滚动。 |
-i | 忽略闲置和僵尸进程。 |
-c | 显示完整的命令行而不是只显示命令名。 |
| 命令 | 描述 |
|---|---|
top -b -n 1 > top_output.txt | 以批处理模式运行top,只执行一次,并将输出重定向到top_output.txt文件中。 |
top -d 5 -n 10 | 设置top的刷新间隔为 5 秒,并且只运行 10 次后退出。 |
top -u username | 显示指定用户名为username的所有进程。 |
top -H -p 1234 | 显示进程 ID 为 1234 的所有线程,而不是进程。-H选项用于显示线程级别的信息。 |
top -c | 显示完整的命令行信息,而不是只显示命令名。 |
top 指令交互参数
| 命令 | 说明 |
|---|---|
h/? (help) | 显示帮助屏幕,列出所有命令。 |
k (kill) | 结束一个进程。输入k之后,会提示你输入要杀死的进程的 ID。 |
r (renice) | 重新调度一个进程,提示输入要改变优先级的进程 ID 和新优先级值。 |
q (quit) | 退出 top。 |
s (seconds) | 改变刷新时间间隔。输入s后,需要输入新的时间(秒)。 |
P (CPU) | 按 CPU 使用排序。 |
M (Memory) | 按内存使用排序。 |
T (Time) | 按时间/累积时间排序。 |
f (field) | 进入或离开字段管理模式,可以选择要显示的字段。 |
m (memory) | 切换显示内存信息。 |
t (task) | 切换显示任务和 CPU 状态信息。 |
o (order) | 改变排序顺序,例如输入 o,然后 pid,可以按进程 ID 排序。 |
n (num) | 设置显示的任务数量。 |
u (user) | 显示特定用户的进程,提示输入用户名。 |
c (command) | 切换显示完整的命令行或仅显示命令名。 |
i (idle) | 切换是否显示闲置和僵尸进程。 |
b/B (bold) | 切换高亮显示当前活动进程。 |
l (load) | 切换显示平均负载和启动时间信息。 |
1 | 切换显示每个 CPU 的状态信息。 |